package com.design.design.pattern.structural.proxy.selfPractice.jdkdynamic2;

import java.lang.reflect.Proxy;

/**
 * JDK 动态代理的调用
 *
 * 1. 通过JDK提供的代理类 Proxy 的 newProxyInstance 方法创建动态代理对象
 * 2. 创建动态代理对象的时候传入的参数有：
 *      a. 简单理解为当前创建动态代理对象创建是所在的类
 *      b. 目标类的方法数组 new Class[]{Subject.class}
 *      c. 我们之前定义的 逻辑增强代理类 （这个自定义的类实现了 InvocationHandler 接口）
 * 3. 将创建出来的动态代理对象强制转为目标的接口类型，然后调用就可以调用方法了
 *    （该方法就是增强之后的方法）
 * @author TomDragon
 */
public class JdkDynamicClient {
    public static void main(String[] args) {
        Subject o = (Subject) Proxy.newProxyInstance(
                JdkDynamicClient.class.getClassLoader(),
                new Class[]{Subject.class},
                new JdkDynamicSubjectProxy(new RealSubject()));
        o.request01();
        o.request02();
        o.request03();
    }
}
